package com.example.demo.support;

import com.google.common.collect.Maps;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.List;
import java.util.Map;

@EqualsAndHashCode(callSuper = true)
@Data
public class IMQueryUserStateResponse extends IMBaseResponse {

    private static final Map<Integer, String> ERROR_CODE_MESSAGE = Maps.newHashMap();

    static {
        ERROR_CODE_MESSAGE.put(90001, "JSON 格式解析失败，请检查请求包是否符合 JSON 规范。或者 To_Account 是空数组");
        ERROR_CODE_MESSAGE.put(90003, "JSON 格式请求包中 To_Account 不符合消息格式描述，请检查 To_Account 类型是否为 String");
        ERROR_CODE_MESSAGE.put(90009, "请求需要 App 管理员权限");
        ERROR_CODE_MESSAGE.put(90011, "批量发消息目标帐号超过500，请减少 To_Account 中目标帐号数量");
        ERROR_CODE_MESSAGE.put(90992, "后端服务超时，请重试");
        ERROR_CODE_MESSAGE.put(90994, "服务内部错误，请重试");
        ERROR_CODE_MESSAGE.put(90995, "服务内部错误，请重试");
        ERROR_CODE_MESSAGE.put(91000, "服务内部错误，请重试");
    }

    @Data
    public static class Item {
        private String To_Account;

        /**
         * 返回的用户状态，目前支持的状态有：
         * 1."Online"：客户端登录后和即时通信 IM 后台有长连接
         * 2."PushOnline"：iOS 和 Android 进程被 kill 或因网络问题掉线，进入 PushOnline 状态，此时仍然可以接收消息的离线推送。（客户端切到后台，但是进程未被手机操作系统 kill 掉时，此时状态仍是 Online。）
         * 3."Offline"：客户端主动退出登录或者客户端自上一次登录起7天之内未登录过
         */
        private String State;
    }

    protected List<Item> QueryResult;

    @Override
    public String transformErrorCode(Integer errorCode) {
        String message = super.transformErrorCode(errorCode);
        if (message != null) {
            return message;
        }
        return ERROR_CODE_MESSAGE.getOrDefault(errorCode, "未知错误");
    }
}
